package com.stephen.demo.util;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;

/**
 * @ author: stephen
 * @ create: 2020-03-16 18:08
 * @ description: 加密/解密 工具包的使用
 **/
public class EncryptDecodeUtil {

    /**
     * 不可逆,md5加密
     * 加密后32位 e10adc3949ba59abbe56e057f20f883e
     * @param str
     * @return
     */
    public static String md5Encode(String str) {
        return DigestUtils.md5Hex(str);
    }

    /**
     * spring自带的md5加密,与上边结果相同
     * 加密后32位 e10adc3949ba59abbe56e057f20f883e
     * @param str
     * @return
     */
    public static String springMd5Encode(String str) {
        return org.springframework.util.DigestUtils.md5DigestAsHex(str.getBytes());
    }

    /**
     * 不可逆,sha1加密
     * 加密之后是40位 7c4a8d09ca3762af61e59520943dc26494f8941b
     * @param str
     * @return
     */
    public static String sha1Encode(String str) {
        return DigestUtils.sha1Hex(str);
    }

    /**
     * 不可逆,sha256加密
     * 加密后是64位 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
     * @param str
     * @return
     */
    public static String sha256Encode(String str) {
        return DigestUtils.sha256Hex(str);
    }

    /**
     * 不可逆,sha384加密
     * 加密后96位 0a989ebc4a77b56a6e2bb7b19d995d185ce44090c13e2984b7ecc6d446d4b61ea9991b76a4c2f04b1b4d244841449454
     * @param str
     * @return
     */
    public static String sha384Encode(String str) {
        return DigestUtils.sha384Hex(str);
    }

    /**
     * 不可逆,sha512加密
     * 加密后128位 ba3253876aed6bc22d4a6ff53d8406c6ad864195ed144ab5c87621b6c233b548baeae6956df346ec8c17f5ea10f35ee3cbc514797ed7ddd3145464e2a0bab413
     * @param str
     * @return
     */
    public static String sha512Encode(String str) {
        return DigestUtils.sha512Hex(str);
    }

    /**
     * 可逆,Base64加密
     * @return
     */
    public static String base64Encode(String str) {
        Base64 base64 = new Base64();
        String encodeStr = base64.encodeToString(str.getBytes());
        return encodeStr;
    }

    /**
     * 可逆,Base64解密
     * @param str
     * @return
     */
    public static String base64Decode(String str) {
        Base64 base64 = new Base64();
        return new String(base64.decode(str));
    }

    public static void main(String[] args) {
        String str = "123456";
        System.out.println("md5: " + EncryptDecodeUtil.md5Encode(str));
        System.out.println("spring md5: " + EncryptDecodeUtil.springMd5Encode(str));
        System.out.println("base64 encode: " + EncryptDecodeUtil.base64Encode(str));
        System.out.println("base64 decode: " + EncryptDecodeUtil.base64Decode(str));
        System.out.println("sha1: " + EncryptDecodeUtil.sha1Encode(str));
        System.out.println("sha256: " + EncryptDecodeUtil.sha256Encode(str));
        System.out.println("sha384: " + EncryptDecodeUtil.sha384Encode(str));
        System.out.println("sha512: " + EncryptDecodeUtil.sha512Encode(str));
    }
}
